home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d18 / nrpas13.arc / LINMIN.DEM < prev    next >
Text File  |  1991-05-01  |  1KB  |  68 lines

  1. PROGRAM d10r7(input,output);
  2. (* driver for routine LINMIN *)
  3. CONST
  4.    ndim=3;
  5.    pio2=1.5707963;
  6. TYPE
  7.    glnp = ARRAY [1..ndim] OF real;
  8.    glndim = glnp;
  9.    glnarray = glnp;
  10. VAR
  11.    ncom : integer;
  12.    pcom,xicom : glndim;
  13.    fret,sr2,x : real;
  14.    i,j : integer;
  15.    p,xi : glnp;
  16.  
  17. FUNCTION fnc(x : glnp) : real;
  18. (* calling routine must define type
  19. TYPE
  20.    glnp = ARRAY [1..np] OF real;
  21. where np dimension of vector x. *)
  22. VAR
  23.    i : integer;
  24.    f : real;
  25. BEGIN
  26.    f := 0.0;
  27.    FOR i := 1 to 3 DO BEGIN
  28.       f := f+sqr(x[i]-1.0)
  29.    END;
  30.    fnc := f
  31. END;
  32.  
  33. (*$I MODFILE.PAS *)
  34. (*$I F1DIM.PAS *)
  35.  
  36. FUNCTION func(x: real): real;
  37. BEGIN
  38.    func := f1dim(x)
  39. END;
  40.  
  41. (*$I MNBRAK.PAS *)
  42.  
  43. (*$I BRENT.PAS *)
  44.  
  45. (*$I LINMIN.PAS *)
  46.  
  47. BEGIN
  48.    writeln;
  49.    writeln('Minimum of a 3-d quadratic centered');
  50.    writeln('at (1.0,1.0,1.0). Minimum is found');
  51.    writeln('along a series of radials.');
  52.    writeln;
  53.    writeln('x':9,'y':12,'z':12,'minimum':14);
  54.    FOR i := 0 to 10 DO BEGIN
  55.       x := pio2*i/10.0;
  56.       sr2 := sqrt(2.0);
  57.       xi[1] := sr2*cos(x);
  58.       xi[2] := sr2*sin(x);
  59.       xi[3] := 1.0;
  60.       p[1] := 0.0;
  61.       p[2] := 0.0;
  62.       p[3] := 0.0;
  63.       linmin(p,xi,ndim,fret);
  64.       FOR j := 1 to 3 DO write(p[j]:12:6);
  65.       writeln(fret:12:6)
  66.    END
  67. END.
  68.